package hanhns.test.database;


import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;


public class DBAdapter 
{
    public static final String KEY_ROWID = "_id";
    public static final String KEY_title = "title";
    public static final String KEY_content= "content";    
    private static final String TAG = "DBAdapter";
    
    private static final String DATABASE_NAME = "bNote";
    private static final String DATABASE_TABLE = "table_note";
    private static final int DATABASE_VERSION = 1;

    private static final String DATABASE_CREATE =
        "create table table_note (_id integer primary key autoincrement, "
        + "title text not null, content text not null)";
        
        
    private final Context context; 
    
    private DatabaseHelper DBHelper;
    private SQLiteDatabase db;

    public DBAdapter(Context ctx) 
    {
        this.context = ctx;
        DBHelper = new DatabaseHelper(context);
    }
        
    private static class DatabaseHelper extends SQLiteOpenHelper 
    {
        DatabaseHelper(Context context) 
        {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
        }

        @Override
        public void onCreate(SQLiteDatabase db) 
        {
            db.execSQL(DATABASE_CREATE);
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, 
        int newVersion) 
        {
            Log.w(TAG, "Upgrading database from version " + oldVersion 
                    + " to "
                    + newVersion + ", which will destroy all old data");
            db.execSQL("DROP TABLE IF EXISTS table_note");
            onCreate(db);
        }
    }    
    
    //---opens the database---
    public DBAdapter open() throws SQLException 
    {
        db = DBHelper.getWritableDatabase();
        return this;
    }

    //---closes the database---    
    public void close() 
    {
        DBHelper.close();
    }
    
    //---insert a title into the database---
    public long insertNote(String title, String content) 
    {
        ContentValues initialValues = new ContentValues();
        initialValues.put(KEY_title, title);
        initialValues.put(KEY_content, content);
        return db.insert(DATABASE_TABLE, null, initialValues);
    }

    //---deletes a particular title---
    public boolean deleteNote(long id) 
    {
        return db.delete(DATABASE_TABLE, KEY_ROWID + 
        		"=" + id, null) > 0;
    }

    //---retrieves all the titles---
//    public Cursor getAllTitles() 
//    {
//        return db.query(DATABASE_TABLE, new String[] {
//        		KEY_ROWID, 
//        		KEY_ISBN,
//        		KEY_TITLE,
//                KEY_PUBLISHER}, 
//                null, 
//                null, 
//                null, 
//                null, 
//                null);
//    }

    //---retrieves a Note title---
    public String getTitle(long id)
    {
    	String query = "select " + KEY_title + " from " + DATABASE_TABLE + " where " + KEY_ROWID + " = " + id;
        Cursor mCursor = db.rawQuery(query, null);
//                db.query(true, DATABASE_TABLE, new String[] {
//                		KEY_ROWID,
//                		KEY_ISBN, 
//                		KEY_TITLE,
//                		KEY_PUBLISHER
//                		}, 
//                		KEY_ROWID + "=" + rowId, 
//                		null,
//                		null, 
//                		null, 
//                		null, 
//                		null);
        if (mCursor != null) {
            mCursor.moveToFirst();
        }
        return mCursor.getString(0);
    }
    
    //Get content of note
    public String getNote(long id){
    	String query = "select " + KEY_content + " from " + DATABASE_TABLE + " where " + KEY_ROWID + " = " + id;
    	Cursor cusor = db.rawQuery(query, null);
    	if(cusor != null)cusor.moveToFirst();
    	return cusor.getString(0);
    }

    //---updates a title---
    public boolean updateTitle(long id, String title, String content) 
    {
        ContentValues args = new ContentValues();
        args.put(KEY_title, title);
        args.put(KEY_content, content);
        return db.update(DATABASE_TABLE, args, 
                         KEY_ROWID + "=" + id, null) > 0;
    }
    
    //Get all note
    public Cursor getAllNote(String orderby){
    	String qr;
    	if(orderby != null){
    		qr = "select * from " + DATABASE_TABLE + " order by " + orderby;
    	}else{
    		qr = "select * from " + DATABASE_TABLE;
    	}
    	
    	Cursor all = db.rawQuery(qr, null);
    	return all;
    }
    
    //search note with key for content or title
    public Cursor search(String key){
    	Cursor kq = null;
    	String query = "select * from " + DATABASE_TABLE + " where " + KEY_title 
    	+ " like '%" + key + "%' or " + KEY_content + " like '%" + key + "%'";
    	Log.e("query search", query);
    	kq = db.rawQuery(query, null);
    	return kq;
    }
}
